/**
 * 
 */
package br.com.cept.sce.facade;

import java.util.ArrayList;
import java.util.List;

import br.com.cept.sce.commons.util.Logger;
import br.com.cept.sce.commons.util.MessagesUtil;
import br.com.cept.sce.commons.util.Servico;
import br.com.cept.sce.dao.PerfilDAO;
import br.com.cept.sce.dao.UsuarioDAO;
import br.com.cept.sce.dominio.IPerfil;
import br.com.cept.sce.dominio.IUsuario;
import br.com.cept.sce.dominio.impl.Perfil;
import br.com.cept.sce.dominio.impl.Usuario;
import br.com.cept.sce.exception.manterUsuario.UsuarioExistenteException;
import br.com.cept.sce.exception.manterUsuario.UsuarioInexistenteException;

/**
 * @author Junier Amorim
 *
 */
public class ManterUsuarioFacade {
	
	public IUsuario autenticarUsuario(IUsuario usuario) throws UsuarioInexistenteException, Exception{		
		try{
			UsuarioDAO dao = new UsuarioDAO();
			Usuario user = dao.carregarUsuario(usuario.getLogin());
			if((user != null) && (user.getSenha().equals(usuario.getSenha()))){
				Logger.getInstance().registrarLog(MessagesUtil.getMensagem("login_sucesso"), user.getId());
				return (IUsuario)user;
			}else
				throw new UsuarioInexistenteException(MessagesUtil.getMensagem("erro_login"));				
		}catch (UsuarioInexistenteException erro){
			erro.printStackTrace();
			throw erro;
		}catch (Exception erro){
			erro.printStackTrace();
			throw new Exception(MessagesUtil.getMensagem("erro_bd"));
		}
	}
	
	public List<IUsuario> listarUsuarios() throws Exception{		
		List<IUsuario> retorno = new ArrayList<IUsuario>();
		try{
			UsuarioDAO dao = new UsuarioDAO();
			List<Usuario> lista = dao.listarTodosUsuarios();
			for(Usuario u : lista){
				retorno.add((IUsuario)u);
			}		
		}catch (Exception erro){
			erro.printStackTrace();
			throw new Exception(MessagesUtil.getMensagem("erro_bd"));
		}
		return retorno;
	}
	
	public void cadastrarUsuario(IUsuario usuario, IPerfil perfil) throws UsuarioExistenteException, Exception{
		try{
			UsuarioDAO dao = new UsuarioDAO();
			Usuario user = dao.carregarUsuario(usuario.getLogin());
			if(user != null)
				throw new UsuarioExistenteException(MessagesUtil.getMensagem("erro_login_existente"));
			PerfilDAO pdao = new PerfilDAO();
			usuario.setPerfil(pdao.carregarPerfil(perfil.getId()));
			dao.salvar((Usuario)usuario);
		}catch (UsuarioExistenteException erro){
			erro.printStackTrace();
			throw erro;
		}catch (Exception erro){
			erro.printStackTrace();
			throw new Exception(MessagesUtil.getMensagem("erro_bd"));
		}
	}
	
	public void atualizarUsuario(IUsuario usuario, IPerfil perfil) throws UsuarioExistenteException, Exception{
		try{
			UsuarioDAO dao = new UsuarioDAO();
			PerfilDAO pdao = new PerfilDAO();
			usuario.setPerfil(pdao.carregarPerfil(perfil.getId()));
			dao.atualizar((Usuario)usuario);
		}catch (UsuarioExistenteException erro){
			erro.printStackTrace();
			throw erro;
		}catch (Exception erro){
			erro.printStackTrace();
			throw new Exception(MessagesUtil.getMensagem("erro_bd"));
		}
	}
	
	public void atualizarUsuario(IUsuario usuario) throws Exception{
		try{
			UsuarioDAO dao = new UsuarioDAO();
			Usuario user = (Usuario)usuario;
			dao.salvar(user);
			String[] param = new String[1];
			param[0]=user.getNome();
			Logger.getInstance().registrarLog(MessagesUtil.getMensagemComParametros("usuario_atualiado", param), Servico.getInstance().obterUsuarioLogado().getId());
		}catch (Exception erro){
			erro.printStackTrace();
			throw new Exception(MessagesUtil.getMensagem("erro_bd"));
		}
	}
	
	public List<IPerfil> listarPerfis()  throws Exception{
		List<IPerfil> retorno = new ArrayList<IPerfil>();
		try{
			PerfilDAO dao = new PerfilDAO();
			List<Perfil> lista = dao.listarTodosPerfis();
			for(Perfil p : lista)
				retorno.add((IPerfil)p);
		}catch (Exception erro){
			erro.printStackTrace();
			throw new Exception(MessagesUtil.getMensagem("erro_bd"));
		}
		return retorno;
	}

}
